/**
 * 
 */
package tur.br.moradadosol.view.form;

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

import tur.br.moradadosol.model.ValorDiaria;
import tur.br.moradadosol.util.Util;

/**
 * @author alex
 *
 */
public class ValorDiariaForm extends ActionForm {
	
	private static final long serialVersionUID = -6789093065249940175L;
	
	private ValorDiaria valorDiaria = null;
	private Collection diarias = null;
	private String gravar = "";
	private String cancelar = "";
	private String deletar = "";
	private String editar = "";
	private String pesquisar = "";
	private String nomepesquisa = "";
	private String voltar = "";

	public ValorDiariaForm() {
		//valorDiaria = new ValorDiaria();
	}
	
	/**
	 * @return the cancelar
	 */
	public String getCancelar() {
		return cancelar;
	}

	public long getCodigo() {
		return valorDiaria.getCodigo();
	}

	/**
	 * @return the deletar
	 */
	public String getDeletar() {
		return deletar;
	}

	/**
	 * @return the diaria
	 */
	public ValorDiaria getDiaria() {
		return valorDiaria;
	}


	public String getExcluido() {
		return Util.getDate(valorDiaria.getExcluido());
	}

	public String getFim() {
		return Util.getDate(valorDiaria.getFim());
	}

	/**
	 * @return the gravar
	 */
	public String getGravar() {
		return gravar;
	}

	public String getInicio() {
		return Util.getDate(valorDiaria.getInicio());
	}

	/**
	 * @return the nomepesquisa
	 */
	public String getNomepesquisa() {
		return nomepesquisa;
	}

	/**
	 * @return the pesquisar
	 */
	public String getPesquisar() {
		return pesquisar;
	}

	/**
	 * @return the procurar
	 */
	public String getEditar() {
		return editar;
	}

	public String getValor() {
		return (valorDiaria.getValor() != null ? 
				valorDiaria.getValor().toString() : "0");
	}

	/**
	 * @return the voltar
	 */
	public String getVoltar() {
		return voltar;
	}

	/**
	 * Executa sempre antes da página ser exibida
	 */
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		valorDiaria = new ValorDiaria();
	}

	/**
	 * @param cancelar the cancelar to set
	 */
	public void setCancelar(String cancelar) {
		this.cancelar = cancelar;
	}

	public void setCodigo(long c) {
		valorDiaria.setCodigo(c);
	}

	/**
	 * @param deletar the deletar to set
	 */
	public void setDeletar(String deletar) {
		this.deletar = deletar;
	}

	public void setExcluido(String exc) {
		valorDiaria.setExcluido(Util.getDate(exc));
	}

	public void setFim(String fim) {
		valorDiaria.setFim(Util.getDate(fim));
	}

	/**
	 * @param gravar the gravar to set
	 */
	public void setGravar(String gravar) {
		this.gravar = gravar;
	}
	
	public void setInicio(String inicio) {
		valorDiaria.setInicio(Util.getDate(inicio));
	}

	/**
	 * @param nomepesquisa the nomepesquisa to set
	 */
	public void setNomepesquisa(String nomepesquisa) {
		this.nomepesquisa = nomepesquisa;
	}
	
	/**
	 * @param pesquisar the pesquisar to set
	 */
	public void setPesquisar(String pesquisar) {
		this.pesquisar = pesquisar;
	}

	/**
	 * @param carregar the procurar to set
	 */
	public void setEditar(String carregar) {
		this.editar = carregar;
	}

	public void setValor(String valor) {
		valorDiaria.setValor(new BigDecimal(valor));
	}

	/**
	 * @param voltar the voltar to set
	 */
	public void setVoltar(String voltar) {
		this.voltar = voltar;
	}

	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		
		ActionErrors errors = new ActionErrors();
		
		if(!getGravar().equals("")) {
			//valida data de inicio
			if(getInicio() == null || getInicio().length() == 0) {
				errors.add("error.valordiaria.inicio", 
						new ActionMessage("error.valordiaria.inicio.required"));
			} else {
				Calendar cIni = Util.getDate(getInicio());
				if(cIni == null) {
					errors.add("error.valordiaria.inicio", 
						new ActionMessage("error.valordiaria.inicio.invalid"));
				} else {
					if(cIni.before(new Date())) {
						errors.add("error.valordiaria.inicio", 
								new ActionMessage("error.valordiaria.inicio.past"));
					}
				}
			}
			//valida data de fim
			if(getFim() == null || getFim().length() == 0) {
				errors.add("error.valordiaria.fim", 
						new ActionMessage("error.valordiaria.fim.required"));
			} else {
				Calendar cFim = Util.getDate(getFim());
				if(cFim == null) {
					errors.add("error.valordiaria.fim", 
						new ActionMessage("error.valordiaria.fim.invalid"));
				} else {
					if(cFim.before(new Date())) {
						errors.add("error.valordiaria.fim", 
								new ActionMessage("error.valordiaria.fim.past"));
					}
				}
			}
			
			//valida a quantidade
			if(getQuantidade() <= 0) {
				errors.add("error.valordiaria.quantidade", 
						new ActionMessage("error.valordiaria.quantidade.required"));
			}
			
			//valida o valor
			if(getValor() == null || getValor().length() == 0) {
				errors.add("error.valordiaria.valor", 
						new ActionMessage("error.valordiaria.valor.required"));
			} else if(!Util.isNumeric(getValor())) {
				errors.add("error.valordiaria.valor", 
						new ActionMessage("error.valordiaria.valor.notnumeric"));
			} else {
				try {
					long l = Long.parseLong(getValor());
					if(l <= 0) {
						errors.add("error.valordiaria.valor", 
								new ActionMessage("error.valordiaria.valor.invalid"));
					}
				} catch (Exception e) {
					errors.add("error.valordiaria.valor", 
							new ActionMessage("error.valordiaria.valor.invalid"));
				}
			}
		}
		
		
		return errors;
	}

	/**
	 * @return the diarias
	 */
	public Collection getDiarias() {
		return diarias;
	}

	/**
	 * @param diarias the diarias to set
	 */
	public void setDiarias(Collection diarias) {
		this.diarias = diarias;
	}

	/**
	 * @param valorDiaria the valorDiaria to set
	 */
	public void setValorDiaria(ValorDiaria vd) {
		this.valorDiaria = vd;
	}
	
	public int getQuantidade() {
		return this.valorDiaria.getQuantidade();
	}
	
	public void setQuantidade(int q) {
		this.valorDiaria.setQuantidade(q);
	}
}
